#include "Thread.hpp"
#include "Mutex.hpp"

using namespace ThreadModule;
using namespace LockModule;

int t = 10000;

Mutex mutex;

void func()
{

    while (true)
    {
        {
            LockGuard l(mutex);
            // sleep(1);
            if (t > 0)
            {
                std::cout << "目前是第" << t-- << "张票" << std::endl;
            }
            else
            {
                break;
            }
        }
    }
}
int main()
{
    // 创建对象
    Thread t1(func);
    Thread t2(func);
    Thread t3(func);
    Thread t4(func);

    // 创建线程
    t1.Start();
    t2.Start();
    t3.Start();
    t4.Start();

    // 等待线程
    t1.Join();
    t2.Join();
    t3.Join();
    t4.Join();

    return 0;
}
// 互斥锁 并初始化
//  pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

// void func()
// {
//     //加锁
//     pthread_mutex_lock(&mutex);
//     while(t > 0)
//     {
//         //sleep(1);
//         std::cout<<"目前是第"<< t--<< "张票"<<std::endl;
//     }

//     //解锁
//     pthread_mutex_unlock(&mutex);
// }
// int main()
// {
//     //创建对象
//     Thread t1(func);
//     Thread t2(func);
//     Thread t3(func);
//     Thread t4(func);

//     //创建线程
//     t1.Start();
//     t2.Start();
//     t3.Start();
//     t4.Start();

//     //等待线程
//     t1.Join();
//     t2.Join();
//     t3.Join();
//     t4.Join();

//     return 0;
// }

// void func()
// {
//     while(t > 0)
//     {
//         sleep(1);
//         std::cout<<"目前是第"<< t--<< "张票"<<std::endl;

//     }
// }
// int main()
// {
//     //创建对象
//     Thread t1(func);
//     Thread t2(func);
//     Thread t3(func);
//     Thread t4(func);

//     //创建线程
//     t1.Start();
//     t2.Start();
//     t3.Start();
//     t4.Start();

//     //等待线程
//     t1.Join();
//     t2.Join();
//     t3.Join();
//     t4.Join();

//     return 0;
// }